package threadcoreknowledge.createthread.uncaughtexception;

/**
 *
 *  不加try catch抛出4个异常，都带线程名字
 *  加了try catch，期望捕获到第一个线程的异常
 *
 *  234线程不应该运行，希望看到打印出Caught Exception
 *
 *  执行时发现，根本没有Caught Exception,线程234依然运行并且抛出异常
 *
 *  说明线程的异常不能用传统方法捕获
 *
 */
public class CantCatchDirectly implements Runnable {

    public static void main(String[] args) throws InterruptedException {

        //抛出异常是在子线程中的，但是try-catch是在主线程中的，因此异常是无法捕获到的

        try {
            new Thread(new CantCatchDirectly()).start();
            Thread.sleep(300);

            new Thread(new CantCatchDirectly()).start();
            Thread.sleep(300);

            new Thread(new CantCatchDirectly()).start();
            Thread.sleep(300);


            new Thread(new CantCatchDirectly()).start();
            Thread.sleep(300);
        } catch (InterruptedException e) {
            System.out.println("Caught Exception");
        }


    }



    @Override
    public void run() {
        //方案一
        try {
            throw new RuntimeException();
        } catch (RuntimeException e) {
//            System.out.println("Caught Exception");
        }

        //方案二:UncaughtExceptionHandler





    }
}
